#ifndef __T_PLUGIN_PLUGIN_H_
#define __T_PLUGIN_PLUGIN_H_

#include <stdarg.h>

typedef struct {
    char *name;                                  // 算子名称（唯一）
    char *rev;                                   // 算子版本（和名称一起，与配置文件对应加载）

    void *(*load)(const char *cfg_path);         // 加载资源（框架启动执行）
    void (*unload)(void *cfg);                   // 卸载资源(框架停止执行)

    void *(*new)(void *cfg, const char *param);  // 客户请求算子时实例化
    void (*delete)(void *ins);                   // 客户停止使用时调用

    int  (*process)(void *ins, char *fmt, ...);  // 离线语义

    int  (*start)(void *ins, char *fmt, ...);    // 流式语义->开始
    int  (*feed)(void *ins, char *fmt, ...);     // 流式语义->上行传送数据
    int  (*stop)(void *ins, char *fmt, ...);     // 流式语义->停止传送数据
} plugin;

#endif
